package org.example.config;

import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.pinecone.PineconeEmbeddingStore;
import dev.langchain4j.store.embedding.pinecone.PineconeServerlessIndexConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 向量存储配置类
 * 用于配置和创建Pinecone向量存储实例
 */
@Configuration
public class EmbeddingStoreConfig {

    @Autowired
    private EmbeddingModel embeddingModel;


    /**
     * 创建并配置Pinecone向量存储Bean
     *
     * @return 配置好的EmbeddingStore实例，用于存储和检索文本片段的向量表示
     */
    @Bean
    public EmbeddingStore<TextSegment> embeddingStore() {
        //创建向量存储空间
        EmbeddingStore<TextSegment> embeddingStore = PineconeEmbeddingStore.builder()
                .apiKey("pcsk_6kjPGo_MNVmRU4rtZP5dtV8cQEFRPRnpieKhDreokXFkLTtd5MFRCgJZsHnPtrcfvEF5qp")
                .index("my-index-jd")//如果指定的索引不存在，将创建一个新的索引
                .nameSpace("jd-namespace") //如果指定的名称空间不存在，将创建一个新的名称
                .createIndex(PineconeServerlessIndexConfig.builder()
                .cloud("AWS") //指定索引部署在 AWS 云服务上。
                .region("us-east-1") //指定索引所在的 AWS 区域为 us-east-1。
                .dimension(embeddingModel.dimension()) //指定索引的向量维度，该维度与 embeddedModel 生成的向量维度相同。
                .build())
                .build();
        return embeddingStore;
    }
}

